#字典使用大括号 {} 来创建空字典
d1 = {}

d2 = {"name": "张三",
      "age": 18,
      "sex":True,
      "weight": 80.5,
      "hobbies": ["football","swimming"],
      "score":(97,98,99,100),
       "address":{
          "province":"北京",
          "city":"北京",
          "street":"东城街"
      }
      } #值可以为任意类型,字符串，整型，浮点型，布尔型，列表，元组，字典
# print(type(d2))

#遍历字典
for key in d2:
      print(key,d2[key])

#访问字典元素
str = f'我的名字是{d2["name"]},我的年龄是{d2["age"]},我的性别是{d2["sex"]},我的体重是{d2["weight"]},我的爱好是{d2["hobbies"][0]},我的成绩是{d2["score"][1]},我的地址是{d2["address"]["street"]}'
print(str)

#get dict.get(key, default=None） 函数返回指定键的值，如果key没有的话，则会返回default（默认是None，如果你设置了该参数则返回你设置的default）

d3 = { "name": "张三",}

# print(d3.get("name"))
print(d3.get("age"))  #None
print(d3.get("age",18))  # 18 返回设置的默认值
print(d3.score)  #AttributeError: 'dict' object has no attribute 'score'
'''
get(key) 方法在 key（键）不在字典中时，可以返回默认值 None 或者设置的默认值。
dict[key] 在 key（键）不在字典中时，会触发 KeyError 异常。
'''

#修改 注意：字典无法修改key，只能修改value
d3["name"] = "李四" #修改

# 删除 del删除键值对（不返回value）
del d3["name"]  #删除
#dict.pop(key, default) 删除字典 key（键）及其所对应的值，返回被删除的值。如果键不存在，则可以选择返回一个默认值default（如果参数里提供了）

d4  = { "name": "张三",
      "age": 18,
      "sex":True,
      "weight": 80.5,
      "hobbies": ["football","swimming"],
      "score":(97,98,99,100),
       "address":{
          "province":"北京",
          "city":"北京",
          "street":"东城街"
      }
      }
# print(d4.pop("name"))  # 删除并返回 name对应的值

keys = d4.keys()
print(type(keys)) # <class 'dict_keys'>
print(keys) #  dict_keys(['name', 'age', 'sex', 'weight', 'hobbies', 'score', 'address']) dict.keys() 返回dict里的所有key
'''
dict.keys() 方法返回一个key的视图对象
ps: 视图对象不是列表，不支持索引，可以使用 list() 来转换为列表。因为在使用中如果直接使用dict.keys()，那么返回值为dict_keys，并非直接的列表，若要返回列表值还需调用list函数。
'''

print(list(keys))

vals = d4.values()
# dict.values() 返回dict里的所有value
print(type(vals)) # <class 'dict_values'>
print(vals) # dict_values([97, 98, 99, 100, 'football', 'swimming', {'province': '北京', 'city': '北京', 'street': '东城街'}])
print(list(vals))

# dict.items() 返回所有键值对
items = d4.items()
print(type(items)) # <class 'dict_items'>
print(items) # dict_items([('name', '张三'), ('age', 18), ('sex', True), ('weight', 80.5), ('hobbies', ['football', 'swimming']), ('score', (97, 98, 99, 100)), ('address', {'province': '北京', 'city': '北京', 'street': '东城街'})])
print(list(items)) # [('name', '张三'), ('age', 18), ('sex', True), ('weight', 80.5), ('hobbies', ['football', 'swimming']), ('score', (97, 98, 99, 100)), ('address', {'province': '北京', 'city': '北京', 'street': '东城街'})]

#  字典推导式
dict1 = {x: x**2 for x in range(1, 11)}
print(dict1)
dict2 = {x: x**2 for x in range(1, 11) if x%2==0}
print(dict2)

#清空字典
dict1.clear()
print(dict1)

#字典长度
print(len(dict2))